//package com.gxa.zuul.filter;
//
//import com.netflix.zuul.ZuulFilter;
//import com.netflix.zuul.context.RequestContext;
//import org.springframework.context.annotation.Bean;
//import org.springframework.jmx.export.annotation.ManagedOperation;
//import org.springframework.stereotype.Component;
//import org.springframework.stereotype.Controller;
//import org.springframework.stereotype.Service;
//
//import javax.servlet.http.HttpServletRequest;
//import javax.servlet.http.HttpServletResponse;
//import java.io.PrintWriter;
//
///**
// * @author thinknovo
// * @version 1.0
// * @description MyZuulFilter.java
// * @date 2021/3/11 10:26
// */
//@Component
//public class MyZuulFilter extends ZuulFilter {
//    // ZuulFilter的作用是为了验证哪些请求是合法才会放行，否则直接决定请求，并返回错误信息
//    @Override
//    public String filterType() {
//        /*
//            filterType方法返回一个字符串代表过滤器的类型，在zuul中定义了四种不同生命周期的过滤器类型，具体如下：
//            pre：路由之前
//            routing：路由之时
//            post： 路由之后
//            error：发送错误调用
//         */
//        return "pre";
//    }
//
//    @Override
//    public int filterOrder() {
//        /*
//             filterOrder方法代表过滤的顺序
//         */
//        return 0;
//    }
//
//    @Override
//    public boolean shouldFilter() {
//        /*
//             shouldFilter方法可以写逻辑判断，是否要过滤，true代表永远过滤
//         */
//        return true;
//    }
//
//    @Override
//    public Object run() {
//        /*
//            run方法代表自定义逻辑，可以调用sql或nosql来判断权限处理等，
//            run方法默认返回null，如果在返回之前输出自定义响应数据，调用ctx.setSendZuulResponse(false);则结束路由，不会向服务消费发起请求
//         */
//        RequestContext ctx = RequestContext.getCurrentContext();
//        HttpServletRequest request = ctx.getRequest();
//        System.out.println("url=" + request.getRequestURL().toString() + " method="  + request.getMethod());
//        // 判断用户调用接口时，是否传递了id，如果没有传递id值，那么拦截并返回错误信息，如果传递了id，则发起服务(client)请求
//        Object id = request.getParameter("id");
//        if(id == null) {
//            try {
//                // 终止路由，直接返回客户端信息
//                ctx.setSendZuulResponse(false);  // 设置为false，终止路由   是否放行   核心功能
//                ctx.setResponseStatusCode(500);
//                HttpServletResponse response = ctx.getResponse();
//                response.setContentType("application/json;charset=utf-8");
//                PrintWriter out = ctx.getResponse().getWriter();
//                out.write("{'code':500,'msg':'没有传递id'}");
//            }catch (Exception e){
//                e.printStackTrace();
//            }
//            return null;
//        }
//        return null;
//    }
//}

